<?php
class Registro_empresa_model extends CI_Model{
    function __construct(){
      parent::__construct();
   }

   public function instiContratadas($emprsaId){
       $sql = "select insti.institucionId,insti.institucionRazon from instituciones insti
           inner join postulaciones postu on postu.institucionId = insti.institucionId
           inner join ofertaslaborales ofer on ofer.ofertaLaboralId = postu.ofertaLaboralId
           inner join contratos contra on contra.postulacionesId = postu.postulacionesId group by insti.institucionId order by insti.institucionRazon";
       return $this->db->query($sql);
   }
   public function historiaLaboral($empresa,$personaId){
       /*Funcion para extraer el historial laboral de una persona en una empresa especifica
        */
       $sql = "select ofer.ofertaLaboralFechaCreo,ofer.ofertaLaboralCargo,ofer.ofertaLaboralPerfil,postu.postulacionFecha,postu.postulacionFechaPreseleccion,insti.institucionRazon,contra.contratoFecha,contra.contratoFechaCIerre,contra.contratoCausaCierre from contratos contra
                inner join postulaciones postu on postu.postulacionesId = contra.postulacionesId
                inner join ofertaslaborales ofer on ofer.ofertaLaboralId = postu.ofertaLaboralId
                inner join personas per on per.personasId = postu.personasId
                left join instituciones insti on insti.institucionId = postu.institucionId
                where ofer.empresaId = '$empresa' and per.personasId = '$personaId' order by  contra.contratoFecha desc";
       return $this->db->query($sql);
   }
   public function historiaSolicitud($empresaId,$insId){
       /*Extrae la trazabilidad de una solicitud realizada por una empresa especifica
        */
       $sql = "select soli.solServyAseNombre,soli.solServyAseTipo,soli.solServyAseDescripcion,soli.solServyAseFechaCreo,postu.postulacionFecha,postu.postulacionFechaPreseleccion,contra.contratoFecha,contra.contratoFechaCIerre,contra.contratoCausaCierre,empCal.`empCalServiCumplioHorario`,empCal.`empCalServiCumplioExi` from solservyase soli
                inner join postulaciones postu on postu.solServyAseId = soli.solServyAseId
                inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                left join empcalservi empCal on empCal.`solServyAseId` = soli.`solServyAseId`
                where soli.empresaId = '$empresaId' and postu.institucionId = '$insId' order by contra.contratoFecha desc";
       return $this->db->query($sql);
   }
   public function consOferta($empresaId,$insId){
       /*Extrae la trazabilidad de una oferta laboral
        */
       $sql = "select ofer.ofertaLaboralId,ofer.ofertaLaboralCargo,ofer.ofertaLaboralPerfil,ofer.ofertaLaboralFechaCreo,postu.postulacionFecha,postu.postulacionFechaPreseleccion,contra.contratoFecha,contra.contratoFechaCIerre,contra.contratoCausaCierre from ofertaslaborales ofer
                inner join postulaciones postu on postu.ofertaLaboralId = ofer.ofertaLaboralId
                inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                where ofer.empresaId = '$empresaId' and postu.institucionId = '$insId' ";
       return $sql;
   }
   public function estaOferLab($estado = null,$fecIni=null,$fecFin=null,$empresaId=null){
        $filtro = "";
        //Se hace esta validacion para que se consulte por todas las empresas
        if($empresaId != "TODOS") $filtro = " ofer.empresaId = '$empresaId' and ";

       $fecIni = ($fecIni == "")?"1986-10-01":$fecIni;
       $fecFin = ($fecFin == "")?"2986-10-01":$fecFin." 23:59:59";
       $sql = "select count(ofer.ofertaLaboralId) as total from ofertaslaborales ofer where $filtro ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'";
       $obj = $this->db->query($sql)->result();
       $totOferLab = $obj[0]->total; //se obtiene el total de las ofertas laborales creadas por la empresa
//       echo "hola";
//       $this->session->set_userdata("pruebasMiguel",$this->session->userdata("pruebasMiguel")."1");
//       $this->session->set_userdata("sqlPruebaRodrigo","esta si");
       if($estado == ""){ //consulta todos los estados de las ofertas laborales
           $totOferAbi = $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'A' and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'","","abiertas");
           $totOferCerContra = $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'C'  and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'"," group by ofer.empresaId","CerradasContra");
           $totOferCerNoContra = $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'C'  and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin' "," group by ofer.empresaId","CerradasSinContra");
//           exit($this->session->userdata("sqlAbiertas"));
           
        return array('Abiertas'=>$totOferAbi,'Cerradas_Contratadas'=>$totOferCerContra,'Cerradas_Sin_Contratados'=>$totOferCerNoContra,'total'=>$totOferLab);
       }
       elseif($estado == "Abiertas"){
           $totOferAbi = $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'A' and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'","","abiertas");
           $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'C' and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'","","cerradas");
           return array("Abiertas"=>$totOferAbi,"Cerradas"=>($totOferLab - $totOferAbi),'total'=>$totOferLab);
       }
       elseif($estado == "CerradasContra"){
           $totOferCerContra = $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'C'  and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'"," group by ofer.empresaId","CerradasContra");
           $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'A' and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'","","abiertas");
           $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'C'  and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'"," group by ofer.empresaId","CerradasSinContra");
           $sql = $this->session->userdata("sqlAbiertas")." union " .$this->session->userdata("sqlCerradasSinContra");
           $this->session->unset_userdata('sqlAbiertas');
           $this->session->set_userdata("sqlAbiertas",$sql);
           $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'C'  and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'"," group by ofer.empresaId","abiertamassincontra");
           return array("Cerradas_Contratadas"=>$totOferCerContra,"Abiertas_y_Cerradas_Sin_Contratados"=>($totOferLab - $totOferCerContra),'total'=>$totOferLab);
       }
       elseif($estado == "CerradasSinContra"){
           $totOferCerNoContra = $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'C'  and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'"," group by ofer.empresaId","CerradasSinContra");
           $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'A' and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'","","abiertas");
           $this->estaOferLab_aux("where $filtro ofer.ofertaLaboralEstado = 'C'  and ofer.ofertaLaboralFechaCreo between '$fecIni' and '$fecFin'"," group by ofer.empresaId","CerradasContra");
           $sql = $this->session->userdata("sqlAbiertas")." union " .$this->session->userdata("sqlCerradasContra");
           $this->session->unset_userdata('sqlAbiertas');
           $this->session->set_userdata("sqlAbiertas",$sql);
           return array("Cerradas_Sin_Contratados"=>$totOferCerNoContra,"Abiertas_y_Cerradas_Contratados"=>($totOferLab - $totOferCerNoContra),'total'=>$totOferLab);
       }
   }
   private function estaOferLab_aux($where,$group,$opc){
       switch ($opc) {
           case "abiertas":
               $this->session->unset_userdata('sqlAbiertas');
               $sql = "select count(ofer.ofertaLaboralId) as total from ofertaslaborales ofer ".$where.$group;
               $obj = $this->db->query($sql)->result();
               $sql = "select ofer.*,emp.`empresaRazon` from ofertaslaborales ofer 
                        inner join empresas emp on emp.empresaId = ofer.empresaId ".$where;
               $this->session->set_userdata("sqlAbiertas",$sql);
               return (isset($obj[0]->total))?$obj[0]->total:0; //total ofertas abiertas
               break;
           case "CerradasContra":
                $this->session->unset_userdata('sqlCerradasContra');
                $sql = "SELECT COUNT(ofer.ofertaLaboralId) AS total
                        FROM ofertaslaborales ofer
                        $where and exists(
                        select * from postulaciones postu 
                        inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                        where postu.ofertaLaboralId = ofer.ofertaLaboralId)
                        $group";
                $obj = $this->db->query($sql)->result();
                $sql = "SELECT *
                        FROM ofertaslaborales ofer
                        $where and exists(
                        select * from postulaciones postu 
                        inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                        where postu.ofertaLaboralId = ofer.ofertaLaboralId)";
                $this->session->set_userdata("sqlCerradasContra",$sql);
                return (isset($obj[0]->total))?$obj[0]->total:0; //total ofertas cerradas y contratadas
               break;
           case "CerradasSinContra":
               $this->session->unset_userdata('sqlCerradasSinContra');
                $sql = "SELECT COUNT(ofer.ofertaLaboralId) AS total
                        FROM ofertaslaborales ofer
                        $where AND NOT EXISTS(select * from postulaciones postu 
                        inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                        where postu.ofertaLaboralId = ofer.ofertaLaboralId)
                        $group";
                $obj = $this->db->query($sql)->result();
                $sql = "SELECT ofer.*,emp.`empresaRazon`
                        FROM ofertaslaborales ofer
                        inner join empresas emp on emp.empresaId = ofer.empresaId
                        $where AND NOT EXISTS(select * from postulaciones postu 
                        inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                        where postu.ofertaLaboralId = ofer.ofertaLaboralId)
                        $group";
                $this->session->set_userdata("sqlCerradasSinContra",$sql);
                return (isset($obj[0]->total))?$obj[0]->total:0; //total ofertas cerradas y contratadas
               break;
           case "cerradas":
               $this->session->unset_userdata('sqlCerradas');
               $sql = "select emp.empresaRazon,ofer.ofertaLaboralFechaCreo,ofer.ofertaLaboralCargo,ofer.ofertaLaboralPerfil,ofer.ofertaLaboralCompetencia,ofer.ofertaLaboralRangoSalarioBase,ofer.ofertaLaboralRangoSalarioTope,ofer.ofertaLaboralDescripcion from ofertaslaborales ofer 
                        inner join empresas emp on emp.empresaId = ofer.empresaId  ".$where;
               $this->session->set_userdata("sqlCerradas",$sql);
               break;
           case "abiertamassincontra":
               break;
       }
       return;
   }
   public function obtResult($sql){
//       echo $sql;
       return $this->db->query($sql);
   }
   public function estaDesercion($fecIni = null,$fecFin=null,$empresaId = null){
       $filtro = "";
       //Se hace esta validacion para que se consulte por todas las empresas
       if($empresaId != "TODOS") $filtro = " ofer.empresaId = '$empresaId' and ";
       $fecIni = ($fecIni == "")?"1986-10-01":$fecIni;
       $fecFin = ($fecFin == "")?"2986-10-01":$fecFin." 23:59:59";
       $sql = "select count(contra.contratoId) as total from contratos contra
                inner join postulaciones postu on postu.postulacionesId = contra.postulacionesId
                inner join personas per on per.personasId = postu.personasId
                inner join ofertaslaborales ofer on ofer.ofertaLaboralId = postu.ofertaLaboralId
                where $filtro contra.contratoFecha between '$fecIni' and '$fecFin'";
       $query = $this->db->query($sql)->result();
       $totContra = $query[0]->total;
       $sql .= " and contra.contratoEstado = 'I'";
//       exit($sql);
       $query = $this->db->query($sql)->result();
       $totDesertados = $query[0]->total;
       $sql = "select ofer.ofertaLaboralFechaCreo,ofer.ofertaLaboralCargo,ofer.ofertaLaboralPerfil,postu.postulacionFechaPreseleccion,CONCAT(per.personaNombres,' ',per.personaApellidos) as Nombres,per.personaTipoDocumento,per.personaDocumento,contra.contratoFecha,contra.contratoCausaCierre,contra.contratoFechaCIerre,emp.empresaRazon from contratos contra
                inner join postulaciones postu on postu.postulacionesId = contra.postulacionesId
                inner join personas per on per.personasId = postu.personasId
                inner join ofertaslaborales ofer on ofer.ofertaLaboralId = postu.ofertaLaboralId
                inner join empresas emp on emp.empresaId = ofer.empresaId
                where $filtro contra.contratoFecha between '$fecIni' and '$fecFin'";
       $this->session->unset_userdata('sqlAbiertas');
       $this->session->set_userdata("sqlAbiertas",$sql." and contra.contratoEstado = 'A'");
       $sql .= " and contra.contratoEstado = 'I'";
       $this->session->unset_userdata('sqlCerradas');
       $this->session->set_userdata("sqlCerradas",$sql);
       return array("Empleados"=>$totContra - $totDesertados,"Desertados"=>$totDesertados,"totEmp"=>$totContra);
   }
   
}
?>
